﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using CRC.Incidencias.Dominio.Controladores;
using CRC.Icidencias.Dominio.Controladores;
using CRC.Comun.Presentacion;
using System.ComponentModel;

namespace CRC.Incidencias.Presentacion
{
    public partial class GestionIncidencias : UserControl, IIncidenciasListener 
    {
        private ControladorGestionDeIncidencias cGI = new ControladorGestionDeIncidencias();

        public GestionIncidencias()
        {
            InitializeComponent();
            cargarSalones();
        }
        
        private void cargarSalones() 
        {
            try
            {
                cmbSalones.SetData(this.cGI.listarSalonesLigeros());
            }
            catch (ApplicationException aEx) 
            {
                MessageBox.Show(aEx.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #region " Eventos "

            private void cmbSalones_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (cmbSalones.SelectedIndex != -1)
                {

                    listarIncidencias();
                }
                else
                {
                    listaIncidencias.Rows.Clear();
                    butAbrirIncidencia.Enabled = false;
                }
            }

            private void listarIncidencias() 
            { 
                this.listaIncidencias.Rows.Clear();
                butAbrirIncidencia.Enabled = false;
                lblCargando.Visible = true;
                cmbSalones.Enabled = false;
                cargarIncidencias.RunWorkerAsync((int)cmbSalones.SelectedKey);
            }

            void listaIncidencias_CellClick(object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
            {
                if (e.ColumnIndex != -1 && 
                    listaIncidencias.Columns[e.ColumnIndex].Name.CompareTo("VERFOTOS") == 0)
                {
                    int intInc = (int)listaIncidencias.Rows[e.RowIndex].Cells["ID"].Value;
                    FotosIncidencias fotosIncidencias = new FotosIncidencias(intInc);
                    fotosIncidencias.Dock = DockStyle.Fill;
                    this.Controls.Add(fotosIncidencias);
                    fotosIncidencias.BringToFront();
                }
            }

            private void butClose_Click(object sender, EventArgs e)
            {
                this.Dispose();
            }

            private void butAbrirIncidencia_Click(object sender, EventArgs e)
            {
                AbrirIncidencia abrirIncidencia = new AbrirIncidencia((int)cmbSalones.SelectedKey);
                abrirIncidencia.StartPosition = FormStartPosition.CenterParent;
                abrirIncidencia.añadirIIncidenciaListener(this);
                abrirIncidencia.ShowDialog();
            }
            
            private void butModificarIncidencia_Click(object sender, EventArgs e)
            {
                int intIncidenciaSeleccionada = (int)listaIncidencias.SelectedRows[0].Cells["ID"].Value;
                ModificarIncidencia modificarincidecia = new ModificarIncidencia(intIncidenciaSeleccionada);
                modificarincidecia.StartPosition = FormStartPosition.CenterScreen;
                modificarincidecia.añadirIIncidenciaListener(this);
                modificarincidecia.ShowDialog();
            }
        
            private void butEliminarInc_Click(object sender, EventArgs e)
            {
                int intIncidenciaSeleccionada = (int)listaIncidencias.SelectedRows[0].Cells["ID"].Value;
                if (MessageBox.Show("¿Estás seguro de eliminar esta incidencia?", "Confirmación",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
                    == DialogResult.Yes)
                {
                    try
                    {
                        ControladorEliminarIncidencia cEI = new ControladorEliminarIncidencia();
                        cEI.eliminar(intIncidenciaSeleccionada);
                        listaIncidencias.Rows.Remove(listaIncidencias.SelectedRows[0]);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(
                            ex.Message, "Error",
                            MessageBoxButtons.OK, MessageBoxIcon.Error
                        );
                    }
                }
            }

        #endregion

        #region Miembros de IIncidenciasListener

        public void abrirIncidencia(int intInc, String pStrCodConcepto, String pStrConcDesc, 
            String pStrAsign, DateTime pFechaLim, String pStrObservaciones
        )
        {
            listaIncidencias.Rows.Insert(0, new Object[] { intInc, pStrCodConcepto, pStrConcDesc, pStrObservaciones, false });
        }

        public void modificarIncidencia(int pIntInc, String pStrCodConcepto, String pStrConcDesc, 
            String pStrAsign, DateTime pFechaLim, String pStrObservaciones, Boolean pBCerrada
        )
        {
            foreach (DataGridViewRow aRow in listaIncidencias.Rows)
            {
                if ((int)aRow.Cells["ID"].Value == pIntInc) 
                {
                    aRow.SetValues(new Object[] { pIntInc, pStrCodConcepto, pStrConcDesc, pStrObservaciones, pBCerrada });
                    return;
                }
            }
        }

        #endregion

        private void butFotos_Click(object sender, EventArgs e)
        {
            int intInc = (int)listaIncidencias.SelectedRows[0].Cells["ID"].Value;
            FotosIncidencias fotosIncidencias = new FotosIncidencias(intInc);
            fotosIncidencias.Dock = DockStyle.Fill;
            this.Controls.Add(fotosIncidencias);
            fotosIncidencias.BringToFront();
        }

        private void cargarIncidencias_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            try
            {
                e.Result = cGI.listarIncidencias((int)e.Argument);
            }
            catch (Exception ex)
            {
                e.Cancel = true;
                throw ex;
            }
        }

        void cargarIncidencias_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
        {
            lblCargando.Visible = false;
            butAbrirIncidencia.Enabled = true;

            if (e.Error == null)
            {
                IList<Object[]> incidencias = (IList<Object[]>)e.Result;
                foreach (Object[] inc in incidencias)
                    listaIncidencias.Rows.Add(inc);


                cmbSalones.Enabled = true;
            }
            else
            {

                cmbSalones.Enabled = true;

                try
                {
                    throw e.Error;
                }
                catch (ApplicationException aEx)
                {
                    MessageBox.Show(aEx.Message, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
}
